import type { CanEndEnum, CanModifyEnum, FillInTheFrequencyLimitEnum, PermissionsTypeEnum, RecordTypeEnum, ServiceFormExportStatusEnum, ServiceFormExportTypeEnum, ServiceFormFillingPermissionEnum, ServiceFormStatusEnum } from "@/enums/serviceFormEnum"
import type { AddFormItemData, FormItemResult } from "../membership/formCompTypes"
import type { ComponentType } from "@/components/Form/types";
import type { IQuery } from "../indexTypes";

export interface SysUserResult {
  phone: string;
  systemUserId: number;
  userName: string;
  avatar:string;
  roleName: string;
}

export interface ServiceTicketFormAddData {
  serviceTicketFormId?: number
  title: string
  details?: string
}

export interface ServiceTicketFormDetailResult {
  details: string;
  formItemList: FormItemResult[];
  id: number;
  img: string;
  title: string;
  endTime: string;
  userRoleVoList: UserRoleVoList[];
  formPermissions: PermissionsTypeEnum;
}

export interface ServiceTicketFormAddOrUpdateItmeData {
  serviceTicketFormId: number;
  customFormItemList: AddFormItemData[];
}

export interface ServiceTicketFormPublishSetData {
  /** 模板id */
  serviceTicketFormId?: number;
  /** 填写次数限制 */
  participationType: FillInTheFrequencyLimitEnum;
  /** 是否可修改 */
  canModify: CanModifyEnum;
  /** 填写次数 */
  participationNumber: number
  /** 表单填写权限 */
  formPermissions: ServiceFormFillingPermissionEnum,
  /** 是否填写结束时间 */
  canEnd: CanEndEnum,
  /** 表单状态 */
  status: ServiceFormStatusEnum;
  /** 管理员列表 */
  ticketManagerList: { sysUserId: number }[];
  /** 填写人列表 */
  ticketPermissionsList: {
    sysUserId?: number;
    memberId?: number;
    permissionsType: PermissionsTypeEnum;
  }[];
  /** 填写结束时间 */
  endTime?: string;
  /** 海报 */
  img: string
}

/**
 * 可填写表单
 */
export interface IFillOutTheForm {
  /**填写表单id */
  id: number;
  /**表单标题 */
  title: string;
  /**创建人id */
  sysUserId: number;
  /**创建人 */
  userName: string;
}

/**
 * 服务表单- 表单模板
 */
export interface IFormTemplate {
  /**模板id */
  id: number;
  createBy: string;
  createTime: string;
  updateBy: string;
  updateTime: string;
  /**表单类型 1 会员 2 秘书处 */
  formType: PermissionsTypeEnum;
  /**管理员用创建ID */
  sysUserId: number;
  /**小程序用户创建ID */
  appUserId: number;
  /**会员成员ID */
  memberLeadingId: number;
  /**会员ID */
  memberId: number;
  /**图片 */
  img: string;
  /**标题 */
  title: string;
  /**
   * 详情
   */
  details: string;
  /**
   * 填写限制 0 所有人 1 会员填写 2 指定会员填写 3 所有管理员 4 指定管理员
   */
  formPermissions: ServiceFormFillingPermissionEnum;
  /**可被修改：0否，1是 */
  canModify: CanModifyEnum;
  /**参与次类型：0 不限 1 每天 2 每人 */
  participationType: FillInTheFrequencyLimitEnum;
  /**参与次数 */
  participationNumber: number;
  /**提交数量 */
  submitNumber: number;
  /**发布人 */
  userName: string;
  /**
   * 头像
   */
  avatar: string;
  /**发布时间 */
  pushTime: string;
  /**状态：0下架，1上架 */
  status: ServiceFormStatusEnum;
  sortWeight: number;
  startTime: string;
  endTime: string;
}

export interface ServiceTicketFormTemplateDetailResult extends Partial<ServiceTicketFormPublishSetData> {
  id: number
  title: string
  details?: string
}

/**
 * 表单统计
 */
export interface FormStatistics {
  /**id */
  id: number,
  /**模板id */
  serviceTicketFromId: number,
  /** 题目名称*/
  name: string,
  /**题目名称 */
  showName: string,
  itemTypeId: number,
  /** 填写总数*/
  sumNum: number,
  /**有效填写 */
  filledNum: number,
  /**填写百分比 */
  ratio: number,
  /**选择项 */
  itemSelectStatisticsVo: ItemSelectStatisticsVo[]
}

export interface ItemSelectStatisticsVo {
  /**选项名称 */
  answerName: string;
  /**票数 */
  num: number;
  /**比例 */
  ratio: number;
}

/**
 * 统计详情列表
 */
export interface StatisticsDetailList {
  id: number;
  /**用户名称 */
  userName: string;
  /**用户头像 */
  avatar: string;
  content: string;
  /**item类型 */
  itemType: ComponentType;
  /**创建时间 */
  createTime: string;
  contentList: string[];
}

export interface AddServiceTicketFormDtoData {
  serviceTicketRecordId?: number
  serviceTicketFormId?: number
  roleId?: PermissionsTypeEnum
  customFormItem: {
    customFormId: number
    answerList: { formItemId: number, content: string[] }[]
  }
}
/**
 * 表单填写记录
 */
export interface IFormFillRecordList {
  /**主键id */
  id: number;
  /**表单id */
  serviceTicketFormId: number;
  /**填写人名称 */
  userName: string;
  /**填写人头像 */
  avatar: string;
  /**表单标题 */
  title: string;
  /**填写时间 */
  updateTime: string;
  /**是否可以修改 */
  canModify: CanModifyEnum;
  /**是否已经删除 */
  deleted: boolean;
}

/**
 * 表单填写记录 查询参数
 */
export type IFormFillRecordListQuery = IQuery & {
  /**表单id */
  serviceTicketFormId?: number,
  /**记录类型： 0会员自己填写  1收集记录(管理员的)    2详细数据 （传serviceTicketFormId） 3管理员自己填写的 */
  recordType: RecordTypeEnum,
  /**用户名称 */
  userName?: string,
  /**表单标题 */
  title?: string,
  /**开始时间 */
  updateTimegt?: string,
  /**结束时间 */
  updateTimelt?: string,
  /**关键字 */
  keyword?: string;
}

export interface ServiceTicketFormSnapshootDetailResult {
  id: number
  title: string
  details: string
  name: string
  avatar: string
  createTime: string
  formItemList: FormItemResult[];
  canModify: CanModifyEnum;
  serviceTicketFormId: number
  /** 是否可以再填写一份 */
  isFill: boolean
  endTime: string
}

/**
 * 服务表单-导出详情
 */
export interface ServiceFormExportDetail {
  id: number,
  /** 任务ID */
  taskId: string,
  /** 任务类型 */
  taskType: ServiceFormExportTypeEnum,
  /** 任务名称 */
  taskName: string,
  /** 创建时间 */
  createTime: string,
  /** 文件总数量 */
  fileNumber: number;
  /** 失败文件数量 */
  failNumber: number;

  /** 导出任务状态 */
  exportStatus: ServiceFormExportStatusEnum,
  /** 导出任务文件列表 */
  exportTaskFileList?: Array<{
    id: number;
    fileUrl: string;
    fileName: string;
  }>
}

export interface UserRoleVoList {
  /**类型id */
  id: number;
  /**角色名称 */
  name: string;
  /**图标 */
  logo: string;
}